﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
namespace eTMS.Controls
{
    public partial class BaseForm : Form
    {
        public BaseForm()
        {
            InitializeComponent();
        }
       
        protected string MSS_CONFIRM_DELETE = "Bạn có thực sự muốn xóa những bản ghi đã lựa chọn không?";
        protected string MSS_CHOOSERECORD_REQUIRE = "Bạn phải chọn ít nhất một bản ghi để thực hiện thao tác này.";
        protected string MSS_SAVE_SUCCESS = "Ghi dữ liệu thành công.";
        protected string MSS_SAVE_FAILE = "Có lỗi xảy ra khi lưu dữ liệu.";
        protected string MSS_REQUIRE_FIELD = "Bạn phải nhập đầy đủ thông tin trước khi lưu.";
        protected string MSS_ERROR_TEXT = "Bạn bắt buộc phải nhập dữ liệu này";
        protected string MSS_ERROR_DROPDOWN = "Bạn phải chọn dữ liệu này";
        protected string MSS_ERROR_EXISTS_DATA = "Đã tồn tại bản ghi có dữ liệu này";
        protected string MSS_ERROR_DATA_UNIQUE = "Đã tồn tại";
        protected ACTIONENUM Flag = ACTIONENUM.None;
        protected bool AllowToAddReferentTable = true;
        protected bool Confirm(string message)
        {
            return MessageBox.Show(message, "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes;
        }
        protected void ShowInfo(string message)
        {
            MessageBox.Show(message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        protected void ShowWarning(string message)
        {
            MessageBox.Show(message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }
        private void ApplySkin(Control ctrParent, Office2007Renderer.Office2007Renderer rd)
        {
            if (ctrParent.ContextMenuStrip != null)
            {
                ctrParent.ContextMenuStrip.Renderer = rd;
            }
            foreach (Control ctrl in ctrParent.Controls)
            {
                if (ctrl is ToolStrip)
                {
                    ((ToolStrip)ctrl).Renderer = rd;
                }
                else if (ctrl is ToolStripPanel)
                {
                    ((ToolStripPanel)ctrl).Renderer = rd;
                }
                else if (ctrl is ContextMenuStrip)
                {
                    ((ContextMenuStrip)ctrl).Renderer = rd;
                }

                
                if (ctrl.ContextMenuStrip != null)
                {
                    ctrl.ContextMenuStrip.Renderer = rd;
                }
                ApplySkin(ctrl, rd);
            }
        }
        protected override void OnLoad(EventArgs e)
        {
            this.BackColor = Color.FromArgb(255, 255, 255);
            this.StartGradientColor = Color.FromArgb(215, 229, 247);
            this.EndGradientColor = Color.FromArgb(186, 211, 245);
            if (!this.DesignMode)
            {
                //this.AutoScroll = true;
            }
            SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);
            Office2007Renderer.Office2007Renderer rd = new Office2007Renderer.Office2007Renderer();
            base.OnLoad(e);
            ApplySkin(this, rd);
            
        }
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            DrawBackGround(e.Graphics);

        }
        private Color endgradColor = Color.FromArgb(220, 220, 230);
        private Color startgradColor = Color.FromArgb(220, 230, 240);
        private LinearGradientMode gradientMode = LinearGradientMode.Vertical;
        private float gradPercent = 0.5f;
        public LinearGradientMode GradientMode
        {
            get
            {
                return gradientMode;
            }
            set
            {
                gradientMode = value;
                this.Invalidate();
            }
        }
        public float GradientPercent
        {
            get
            {
                return gradPercent;
            }
            set
            {
                gradPercent = value;
                this.Invalidate();
            }
        }
        public Color StartGradientColor
        {
            get
            {
                return startgradColor;
            }
            set
            {
                startgradColor = value;
                this.Invalidate();
            }
        }
        public Color EndGradientColor
        {
            get
            {
                return endgradColor;
            }
            set
            {
                endgradColor = value;
                this.Invalidate();
            }
        }
        private void DrawBackGround(Graphics g)
        {
            // Create a rectangle
            g.Clear(this.BackColor);
            Rectangle rect = this.ClientRectangle;
            // Create a linear gradient brush
            LinearGradientBrush rgBrush =
                new LinearGradientBrush(
                rect, this.startgradColor, this.endgradColor, gradientMode
            );					// Set signma bell shape
            rgBrush.SetSigmaBellShape(gradPercent, 1.0f);
            // Fill rectangle again
            g.FillRectangle(rgBrush, rect);
            // Dispose of object
            Blend blend = new Blend();
            float[] factArray = { 0.0f, 0.3f, 0.8f, 1.0f };
            float[] posArray = { 0.0f, 0.4f, 0.6f, 1.0f };
            // Set Factors and Positions properties of Blend
            blend.Factors = factArray;
            blend.Positions = posArray;
            // Set smoothing mode of Graphics object
            g.SmoothingMode = SmoothingMode.AntiAlias;
            // Create path and add a rectangle
            GraphicsPath path = new GraphicsPath();
            Rectangle rc = new Rectangle(rect.X - (int)(rect.Width/2), rect.Y - rect.Height, (int)(2 * rect.Width), 5 * rect.Height);
            path.AddEllipse(rc);
            // Create path gradient brush
            PathGradientBrush pthBrush =
                new PathGradientBrush(path);
            // Set Blend and FocusScales properties
            pthBrush.Blend = blend;
            pthBrush.FocusScales = new PointF(0.7f, 0.2f);
            Color[] colors = { Color.FromArgb(10, this.startgradColor) };
            // Set CenterColor and SurroundColors properties
            pthBrush.CenterColor = Color.FromArgb(150, Color.White);
            pthBrush.SurroundColors = colors;
            g.FillEllipse(pthBrush, rc);
            pthBrush.Dispose();

        }
        protected override void OnEnter(EventArgs e)
        {
            base.OnEnter(e);
            
        }
        public virtual void TimerTick()
        {
            
        }
    }    
}
public enum ACTIONENUM
{
    None, AddNew, Edit, Loading
}
public enum PERMISSIONENUM
{
    Add, Edit, Del, Print, Search
}